
`timescale 1ns / 100ps

module sha256_tb ();

    localparam DATA_WIDTH = 4808;

    reg  clk;
    reg  rst_n;
    reg  start;
    reg  [DATA_WIDTH-1:0] in_data;
    wire finish;
    wire [255:0] sha_data;

    initial begin
        $dumpfile("./output/sha256.vcd");
        $dumpvars(0, u_sha256);

        in_data = {8'd51, 8'd46, 8'd49, 8'd52, 8'd49, 8'd53, 8'd57, 8'd50, 8'd54, 8'd53, 8'd51, 8'd53, 8'd56, 8'd57, 8'd55, 8'd57, 8'd51, 8'd50, 8'd51, 8'd56, 8'd52, 8'd54, 8'd50, 8'd54, 8'd52, 8'd51, 8'd51, 8'd56, 8'd51, 8'd50, 8'd55, 8'd57, 8'd53, 8'd48, 8'd50, 8'd56, 8'd56, 8'd52, 8'd49, 8'd57, 8'd55, 8'd49, 8'd54, 8'd57, 8'd51, 8'd57, 8'd57, 8'd51, 8'd55, 8'd53, 8'd49, 8'd48, 8'd53, 8'd56, 8'd50, 8'd48, 8'd57, 8'd55, 8'd52, 8'd57, 8'd52, 8'd52, 8'd53, 8'd57, 8'd50, 8'd51, 8'd48, 8'd55, 8'd56, 8'd49, 8'd54, 8'd52, 8'd48, 8'd54, 8'd50, 8'd56, 8'd54, 8'd50, 8'd48, 8'd56, 8'd57, 8'd57, 8'd56, 8'd54, 8'd50, 8'd56, 8'd48, 8'd51, 8'd52, 8'd56, 8'd50, 8'd53, 8'd51, 8'd52, 8'd50, 8'd49, 8'd49, 8'd55, 8'd48, 8'd54, 8'd55, 8'd57, 8'd56, 8'd50, 8'd49, 8'd52, 8'd56, 8'd48, 8'd56, 8'd54, 8'd53, 8'd49, 8'd51, 8'd50, 8'd56, 8'd50, 8'd51, 8'd48, 8'd54, 8'd54, 8'd52, 8'd55, 8'd48, 8'd57, 8'd51, 8'd56, 8'd52, 8'd52, 8'd54, 8'd48, 8'd57, 8'd53, 8'd53, 8'd48, 8'd53, 8'd56, 8'd50, 8'd50, 8'd51, 8'd49, 8'd55, 8'd50, 8'd53, 8'd51, 8'd53, 8'd57, 8'd52, 8'd48, 8'd56, 8'd49, 8'd50, 8'd56, 8'd52, 8'd56, 8'd49, 8'd49, 8'd49, 8'd55, 8'd52, 8'd53, 8'd48, 8'd50, 8'd56, 8'd52, 8'd49, 8'd48, 8'd50, 8'd55, 8'd48, 8'd49, 8'd57, 8'd51, 8'd56, 8'd53, 8'd50, 8'd49, 8'd49, 8'd48, 8'd53, 8'd53, 8'd53, 8'd57, 8'd54, 8'd52, 8'd52, 8'd54, 8'd50, 8'd50, 8'd57, 8'd52, 8'd56, 8'd57, 8'd53, 8'd52, 8'd57, 8'd51, 8'd48, 8'd51, 8'd56, 8'd49, 8'd57, 8'd54, 8'd52, 8'd52, 8'd50, 8'd56, 8'd56, 8'd49, 8'd48, 8'd57, 8'd55, 8'd53, 8'd54, 8'd54, 8'd53, 8'd57, 8'd51, 8'd51, 8'd52, 8'd52, 8'd54, 8'd49, 8'd50, 8'd56, 8'd52, 8'd55, 8'd53, 8'd54, 8'd52, 8'd56, 8'd50, 8'd51, 8'd51, 8'd55, 8'd56, 8'd54, 8'd55, 8'd56, 8'd51, 8'd49, 8'd54, 8'd53, 8'd50, 8'd55, 8'd49, 8'd50, 8'd48, 8'd49, 8'd57, 8'd48, 8'd57, 8'd49, 8'd52, 8'd53, 8'd54, 8'd52, 8'd56, 8'd53, 8'd54, 8'd54, 8'd57, 8'd50, 8'd51, 8'd52, 8'd54, 8'd48, 8'd51, 8'd52, 8'd56, 8'd54, 8'd49, 8'd48, 8'd52, 8'd53, 8'd52, 8'd51, 8'd50, 8'd54, 8'd54, 8'd52, 8'd56, 8'd50, 8'd49, 8'd51, 8'd51, 8'd57, 8'd51, 8'd54, 8'd48, 8'd55, 8'd50, 8'd54, 8'd48, 8'd50, 8'd52, 8'd57, 8'd49, 8'd52, 8'd49, 8'd50, 8'd55, 8'd51, 8'd55, 8'd50, 8'd52, 8'd53, 8'd56, 8'd55, 8'd48, 8'd48, 8'd54, 8'd54, 8'd48, 8'd54, 8'd51, 8'd49, 8'd53, 8'd53, 8'd56, 8'd56, 8'd49, 8'd55, 8'd52, 8'd56, 8'd56, 8'd49, 8'd53, 8'd50, 8'd48, 8'd57, 8'd50, 8'd48, 8'd57, 8'd54, 8'd50, 8'd56, 8'd50, 8'd57, 8'd50, 8'd53, 8'd52, 8'd48, 8'd57, 8'd49, 8'd55, 8'd49, 8'd53, 8'd51, 8'd54, 8'd52, 8'd51, 8'd54, 8'd55, 8'd56, 8'd57, 8'd50, 8'd53, 8'd57, 8'd48, 8'd51, 8'd54, 8'd48, 8'd48, 8'd49, 8'd49, 8'd51, 8'd51, 8'd48, 8'd53, 8'd51, 8'd48, 8'd53, 8'd52, 8'd56, 8'd56, 8'd50, 8'd48, 8'd52, 8'd54, 8'd54, 8'd53, 8'd50, 8'd49, 8'd51, 8'd56, 8'd52, 8'd49, 8'd52, 8'd54, 8'd57, 8'd53, 8'd49, 8'd57, 8'd52, 8'd49, 8'd53, 8'd49, 8'd49, 8'd54, 8'd48, 8'd57, 8'd52, 8'd51, 8'd51, 8'd48, 8'd53, 8'd55, 8'd50, 8'd55, 8'd48, 8'd51, 8'd54, 8'd53, 8'd55, 8'd53, 8'd57, 8'd53, 8'd57, 8'd49, 8'd57, 8'd53, 8'd51, 8'd48, 8'd57, 8'd50, 8'd49, 8'd56, 8'd54, 8'd49, 8'd49, 8'd55, 8'd51, 8'd56, 8'd49, 8'd57, 8'd51, 8'd50, 8'd54, 8'd49, 8'd49, 8'd55, 8'd57, 8'd51, 8'd49, 8'd48, 8'd53, 8'd49, 8'd49, 8'd56, 8'd53, 8'd52, 8'd56, 8'd48, 8'd55, 8'd52, 8'd52, 8'd54, 8'd50, 8'd51, 8'd55, 8'd57, 8'd57, 8'd54, 8'd50, 8'd55, 8'd52, 8'd57, 8'd53, 8'd54, 8'd55, 8'd51, 8'd53, 8'd49, 8'd56, 8'd56, 8'd53, 8'd55, 8'd53, 8'd50, 8'd55, 8'd50, 8'd52, 8'd56, 8'd57, 8'd49, 8'd50, 8'd50, 8'd55, 8'd57, 8'd51, 8'd56, 8'd49, 8'd56, 8'd51, 8'd48, 8'd49, 8'd49, 8'd57, 8'd52, 8'd57, 8'd49, 8'd50, 8'd57, 8'd56, 8'd51, 8'd51, 8'd54, 8'd55, 8'd51, 8'd51, 8'd54, 8'd50, 8'd52, 8'd52, 8'd48, 8'd54, 8'd53, 8'd54, 8'd54, 8'd52, 8'd51, 8'd48, 8'd56, 8'd54, 8'd48, 8'd50, 8'd49, 8'd51, 8'd57, 8'd52, 8'd57, 8'd52, 8'd54, 8'd51, 8'd57, 8'd53, 8'd50, 8'd50, 8'd52, 8'd55, 8'd51, 8'd55, 8'd49, 8'd57, 8'd48, 8'd55, 8'd48, 8'd50, 8'd49, 8'd55, 8'd57, 8'd56, 8'd54, 8'd48, 8'd57, 8'd52, 8'd51, 8'd55, 8'd48, 8'd50, 8'd55, 8'd55, 8'd48, 8'd53, 8'd51, 8'd57, 8'd50, 8'd49, 8'd55, 8'd49, 8'd55, 8'd54, 8'd50, 8'd57, 8'd51, 8'd49, 8'd55, 8'd54, 8'd55, 8'd53, 8'd50, 8'd51, 8'd56, 8'd52, 8'd54, 8'd55, 8'd52, 8'd56, 8'd49, 8'd56, 8'd52, 8'd54, 8'd55, 8'd54, 8'd54, 8'd57, 8'd52, 8'd48, 8'd53, 8'd49, 8'd51};
        clk = 0;
        rst_n = 1;
        #1; rst_n = 0;
        #1; rst_n = 1;
        #6; start = 1;
        #10; start = 0;

        #14000

        $finish;
    end

    always #10 clk = ~clk;

    sha256#(.DATA_WIDTH(DATA_WIDTH)) u_sha256 (
        .clk(clk),
        .rst_n(rst_n),
        .start(start),
        .in_data(in_data),
        .sha_data(sha_data),
        .finish(finish)
    );

endmodule
